home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 1146 / 1146.xpi / chrome / screengrab.jar / content / Browser.js < prev    next >
Text File  |  2009-07-17  |  5KB  |  142 lines

  1.  
  2. screengrab.Browser = function(win) {
  3.     this.win = win;
  4.     this.doc = new screengrab.Document(win.document);
  5.     this.htmlDoc = win.document;
  6.     this.htmlWin = win.content.window;
  7. }
  8. screengrab.Browser.physicalDimensions = function() {
  9.     return new screengrab.Box(window.screenX,
  10.                                      window.screenY,
  11.                                      window.outerWidth,
  12.                                      window.outerHeight);
  13. }
  14. screengrab.Browser.viewportAbsoluteDimensions = function() {
  15.     var win = window.top.getBrowser().selectedBrowser;
  16.     var browser = new screengrab.Browser(win.contentWindow);
  17.     return new screengrab.Box(win.boxObject.screenX, win.boxObject.screenY,
  18.                                browser.getViewportWidth(), browser.getViewportHeight());
  19. }
  20. screengrab.Browser.contentFrame = function() {
  21.     return document.commandDispatcher.focusedWindow;
  22. }
  23. screengrab.Browser.contentFrameDocument = function() {
  24.     return screengrab.Browser.contentFrame().document;
  25. }
  26. screengrab.Browser.contentWindow = function() {
  27.     return window.top.getBrowser().selectedBrowser.contentWindow;
  28. }
  29. screengrab.Browser.contentDocument = function() {
  30.     return screengrab.Browser.contentWindow().document;
  31. }
  32. screengrab.Browser.frameDocumentFor = function(element) {
  33.     return element.ownerDocument;
  34. }
  35. screengrab.Browser.frameFor = function(element) {
  36.     return screengrab.Browser.frameDocumentFor(element).defaultView;
  37. }
  38. screengrab.Browser.prototype = {
  39.     BGCOLOR : nsPreferences.copyUnicharPref("browser.display.background_color", "#ffffff"),
  40.     
  41.     getContentWindow : function() {
  42.         return this.win;
  43.     },
  44.     
  45.     getDocument : function() {
  46.         return this.doc;
  47.     },
  48.     
  49.     getCompletePageRegion : function() {
  50.         var width = this.getDocumentWidth();
  51.         var height = this.getDocumentHeight();
  52.         if (this.getViewportWidth() > width) width = this.getViewportWidth();
  53.         if (this.getViewportHeight() > height) height = this.getViewportHeight();
  54.         
  55.         return new screengrab.Box(0, 0, width, height);
  56.     },
  57.     
  58.     getVisibleDocumentRegion : function() {
  59.         return new screengrab.Box(this.htmlWin.scrollX, this.htmlWin.scrollY, this.getViewportWidth(), this.getViewportHeight());
  60.     },
  61.  
  62.     getViewportRegion : function() {
  63.         return new screengrab.Box(0, 0, this.getViewportWidth(), this.getViewportHeight());
  64.     },
  65.     
  66.     getViewportHeight : function() {
  67.         if (this.htmlDoc.compatMode == "CSS1Compat") {
  68.             // standards mode
  69.             return this.htmlDoc.documentElement.clientHeight;
  70.         }
  71.         // compatMode == "BackCompat") - quirks mode
  72.         return this.htmlDoc.body.clientHeight;
  73.     },
  74.     
  75.     getViewportWidth : function() {
  76.         if (this.htmlDoc.compatMode == "CSS1Compat") {
  77.             // standards mode
  78.             return this.htmlDoc.documentElement.clientWidth;
  79.         }
  80.         // compatMode == "BackCompat") - quirks mode 
  81.         return this.htmlDoc.body.clientWidth;
  82.     },
  83.     
  84.     getDocumentHeight : function() {
  85.         if (this.htmlDoc.compatMode == "CSS1Compat") {
  86.             // standards mode
  87.             return this.htmlDoc.documentElement.scrollHeight;
  88.         }
  89.         return this.htmlDoc.body.scrollHeight;
  90.     },
  91.     
  92.     getDocumentWidth : function() {
  93.         if (this.htmlDoc.compatMode == "CSS1Compat") {
  94.             // standards mode
  95.             return this.htmlDoc.documentElement.scrollWidth;
  96.         }
  97.         return this.htmlDoc.body.scrollWidth;
  98.     },
  99.     
  100.     getCanvas: function() {
  101.         return document.createElementNS("http://www.w3.org/1999/xhtml", "html:canvas");
  102.     },
  103.     
  104.     getFilledCanvas: function(region) {
  105.         var canvas = this.getCanvas();
  106.         this.copyRegionToCanvas(region, canvas);
  107.         return canvas;
  108.     },
  109.     
  110.     getAsDataUrl : function(region, format, params) {
  111.         screengrab.debug("Copying " + region + " to dataUrl as " + format + ", " + params);
  112.         var canvas = this.getFilledCanvas();
  113.         return canvas.toDataURL(format, params);
  114.     },
  115.     
  116.     copyRegionToCanvas : function(region, canvas) {
  117.         var context = this.prepareCanvas(canvas, region);
  118.         context.drawWindow(this.win, region.x, region.y, region.width, region.height, this.BGCOLOR);
  119.         
  120. //        context.translate(10, 50);
  121. //        var width = context.mozMeasureText("Sample String");
  122. //        context.fillStyle = "rgba(100,100,100,100)";
  123. //        context.fillRect(-1, -1, width + 1, 51);
  124. //        context.fillStyle = "Red";
  125. //        context.mozDrawText("Sample String");
  126.  
  127.         context.restore();
  128.         return context;
  129.     },
  130.     
  131.     prepareCanvas : function(canvas, region) {
  132.         canvas.width = region.width;
  133.         canvas.height = region.height;
  134.         canvas.style.width = canvas.style.maxwidth = region.width + "px";
  135.         canvas.style.height = canvas.style.maxheight = region.height + "px";
  136.         
  137.         var context = canvas.getContext("2d");
  138.         context.clearRect(region.x, region.y, region.width, region.height);
  139.         context.save();
  140.         return context;
  141.     }
  142. }